﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using dacli.modelos;
using dacli.modelos.dao;

namespace dacli.vistas.pantallas
{
    public partial class Resultados : Form
    {
        int altura;
        int ancho;
        modelos.Examenes examen;
        modelos.Pedidos pedidos;
        public Resultados(long examenId, long pedidoId)
        {
            InitializeComponent();
            altura = 50;            
            modelos.dao.ExamenesDAO examenesDao = new modelos.dao.ExamenesDAO();
            modelos.dao.PedidosDAO pedidosDao = new modelos.dao.PedidosDAO();
            examen = examenesDao.asignarId(examenId);
            pedidos = pedidosDao.asignarId(pedidoId);
            txtPedido.Text = pedidos.id.ToString();
            txtPaciente.Text = pedidos.paciente.nombre;
        }
        public string getValor(ElementosCategoria elementosCategoria)
        {
            ResultadosCategoriasDAO resultadosCategoriasDAO = new ResultadosCategoriasDAO();
            if (resultadosCategoriasDAO.consultar("examenes_id = " + examen.id + " AND  pedidos_id=" + pedidos.id + " AND elementos_categoria_id=" +elementosCategoria.id))
            {
                return resultadosCategoriasDAO.resultadosCategorias.resultado;
            }
            else
            {
                return null;
            }
        }
        void pintarPantalla()
        {
            int max = examen.examenesCategoria.filas;
            int top = 10;
            int leftInicial = 10;
            int separacion = 250;
            int left = leftInicial;
            modelos.dao.ElementosCategoriaDAO elementosDao = new modelos.dao.ElementosCategoriaDAO();
            modelos.dao.OpcionesElementosDAO opcionesDao = new modelos.dao.OpcionesElementosDAO();
            int fila = 0;
            lblExamenes.Text = examen.nombre;
            foreach (var elemento in elementosDao.listar("id", "examenes_categoria_id="+ examen.examenesCategoria.id,"orden"))
            { 
                int elementoId = Convert.ToInt32(elemento);
                modelos.ElementosCategoria elementos = elementosDao.asignarId(elementoId);                
                Label etiqueta = new Label();
                Control valor;
                List<string> listaOpciones = opcionesDao.listar("nombre", "elementos_categoria_id=" + elementos.id);
                if (listaOpciones.Count > 1)
                {
                    BindingSource bs = new BindingSource();
                    bs.DataSource = listaOpciones;
                    ComboBox aux = new ComboBox();
                    bs.Position = listaOpciones.FindIndex(a => a == getValor(elementos));
                    aux.DataSource = bs;                    
                    valor = aux;
                }
                else {
                    valor = new TextBox();
                    valor.Text = getValor(elementos);
                }
                if (elementos.ancho != 0) {
                    valor.Size = new Size(elementos.ancho, valor.Size.Height);
                }
                    
                etiqueta.Text = elementos.nombre;
                etiqueta.Location = new Point(left, top);
                valor.Location = new Point(left, top + 20);
                //texto.Size = new Size(50, 50);
                
                etiqueta.AutoSize = true;
                panel.Controls.Add(etiqueta);
                panel.Controls.Add(valor);
                fila++;
                left += separacion;
                if (fila == max) {
                    left = leftInicial;
                    fila = 0;
                    top += altura;
                }
            }
        }

        private void Resultados_Load(object sender, EventArgs e)
        {
            pintarPantalla();
        }

        private void panel_Paint(object sender, PaintEventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ResultadosCategoriasDAO resultadosCategoriasDAO = new ResultadosCategoriasDAO();
            ResultadosCategorias resultadosCategorias = new ResultadosCategorias();
            string opcion = "";
            string valor = "";
            foreach (Control control in panel.Controls) 
            {
                if (control.GetType() == typeof(Label))
                {
                    opcion = control.Text;
                }
                if (control.GetType() == typeof(TextBox) || control.GetType()==typeof(ComboBox))
                {
                    modelos.dao.ElementosCategoriaDAO elementosDao = new modelos.dao.ElementosCategoriaDAO();
                    valor = control.Text;
                    ElementosCategoria elemento = elementosDao.getByNombre(opcion, examen.examenesCategoria.id);
                    resultadosCategorias.examenes = examen;
                    resultadosCategorias.elementosCategoria = elemento;
                    resultadosCategorias.pedidos = pedidos;
                    resultadosCategorias.resultado = valor;
                    resultadosCategoriasDAO.resultadosCategorias = resultadosCategorias;
                    if (resultadosCategoriasDAO.consultar("pedidos_id=" + pedidos.id + " AND examenes_id=" + examen.id + " AND elementos_categoria_id=" + elemento.id))
                    {
                        resultadosCategoriasDAO.resultadosCategorias.resultado = valor;
                        resultadosCategoriasDAO.modificar();
                    }
                    else
                        resultadosCategoriasDAO.incluir();
                        
                }
                
            }

        }
    }
}
